package com.mh.controller;

import com.mh.dto.R;
import com.mh.dto.vo.GoodsStartVo;
import com.mh.pojo.GoodsInfos;
import com.mh.pojo.UserInfos;
import com.mh.service.UserInfosService;
import com.mh.utils.JWTUtils;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * Date:2024/10/18
 * author:zmh
 * description: 用户信息相关接口
 **/

@RestController
@RequestMapping("/userInfos")
@CrossOrigin
@Slf4j
@RequiredArgsConstructor
public class UserInfoController {

    private final MongoTemplate mongoTemplate;

    private final UserInfosService userInfosService;

    /**
     * 微信登录
     * @param code 获取临时凭证code
     * @param response ·
     * @return 返回执行结果
     */
    @PostMapping("/login/{code}")
    public R<Object> loginCheck(@PathVariable("code") String code, HttpServletResponse response){
        // 检查登录
        Map<String, Object> resultMap = userInfosService.checkLogin(code);
        if (resultMap.size() > 1){
            log.info("创建的token为=>{}", resultMap.get("token"));
            // 将token添加入响应头以及返回用户信息
            response.setHeader(JWTUtils.header, (String) resultMap.get("token"));
            return R.success(resultMap.get("user"));
        }else{
            return R.error(resultMap.get("errmsg").toString());
        }
    }

    /**
     * 检查用户是否收藏某商品
     * @param userId 用户ID
     * @param goodsId 商品ID
     * @return 是否收藏
     */
    @GetMapping("/checkStart/{userId}/{goodsId}")
    public R<Boolean> checkGoodsStart(@PathVariable("userId") String userId, @PathVariable("goodsId") String goodsId) {
        return userInfosService.checkGoodsStart(userId, goodsId);
    }

    /**
     * 更新用户收藏商品
     * @param goodsStartVo 商品收藏信息
     * @return 是否成功
     */
    @PutMapping("/updateStart")
    public R<Boolean> updateGoodsStart(@RequestBody GoodsStartVo goodsStartVo) {
        return userInfosService.updateGoodsStart(goodsStartVo);
    }

    /**
     * 获取指定用户收藏的商品
     * @param userId 用户ID
     * @return ·
     */
    @GetMapping("/getGoodsStartByUserId/{userId}")
    R<List<GoodsInfos>> getGoodsStartByUserId(@PathVariable String userId){
        return userInfosService.getGoodsStartByUserId(userId);
    }

    /**
     * 检查登录接口，实际将此接口配置到MVC拦截器中，由拦截器拦截请求并判断携带Token是否合法。
     * @return ·
     */
    @PostMapping("/checkLogin")
    R<String> checkLogin(){
        return R.success("已登录");
    }
}
